const DB = uniCloud.database();
const DBCmd = DB.command;
const $ = DB.command.aggregate;
let dbJQL = null
//当前登录用户id
let uid
const uniID = require('uni-id-common')
const options = require('./options.js')
module.exports = {
	_before: async function () { // 通用预处理器
		//客户端信息
		const clientInfo = this.getClientInfo()
		//云服务信息
		const cloudInfo = this.getCloudInfo()
		//token信息
		const token = this.getUniIdToken()
		dbJQL = uniCloud.databaseForJQL({ // 获取JQL database引用，此处需要传入云对象的clientInfo
			clientInfo
		})
		if(token) {
			const tokenRes  = await uniID.createInstance({
				clientInfo
			}).checkToken(token)
			
			if(tokenRes.uid) {
				uid = tokenRes.uid
			}
		}
	},
	/**
	 * getProductCategories获取产品分类
	* @param {string} param1 参数1描述
	* @returns {object} 返回值描述
	*/
	async getProductCategories() {
		// 业务逻辑
		const res = await dbJQL.collection('mydb-product-categories').get()
		return {
			status:true,
			msg:'查询成功',
			data:res.data //请根据实际需要返回值
		}
	},
	 
	/**
	 * getProducts获取产品
	 * @param {string} param1 参数1描述
	 * @returns {object} 返回值描述
	 */
	async getProducts(cid){
		// 业务逻辑
		let where={article_status:1}
		if(cid){
			where.category_id=cid
		}
		// 分类
		const categoryRes = await dbJQL.collection('mydb-product-categories').get()
		console.log('categoryRes',categoryRes)
		//按照parent_id分级处理数据结构，生成类似下面的格式：
		let categoryData = []
		categoryData=categoryRes.data.filter(item=>!item.parent_id)
		console.log('categoryData',categoryData)
		categoryData.forEach(item=>{
			item.shop=[]
			item.navtitle=item.name
			item.cid=item._id
			let children = categoryRes.data.filter(c=>c.parent_id==item._id)
			if(children.length>0){
				children.forEach(child=>{
					item.shop.push({
						id:child._id,
						shoptitle:child.name,
						shopimage:child.icon.url,
					})
				})
			}else{
				item.shop.push({
					id:item._id,
					shoptitle:item.name,
					shopimage:item.icon.url,	
				})
			}
			
		})
		console.log('categoryData',categoryData)

		
		return {
			status:true,
			msg:'查询成功',
			data:categoryData //请根据实际需要返回值
		}
	},
	/**
	 * getProducts获取产品详情
	 * @param {string} param1 参数1描述
	 * @returns {object} 返回值描述
	 */
	async getProductDetail({productId}){
		console.log('productId',productId)
		// 业务逻辑
		if(!productId){
			return {
				status:true,
				msg:'查询失败',
				data:null //请根据实际需要返回值
			}
		}
		const res =await dbJQL.collection('mydb-product-list').doc(productId).get() 
		let tags=[]
		
		// 枚举字段映射表 - 根据 schema 文件定义的所有枚举字段
		
		
		if(!res.data){
			return {
				status:true,
				msg:'查询失败',
				data:null //请根据实际需要返回值
			}
		}else{
			let labels={
				channel:"渠道",
				limit:'产品期限',
				quota:'产品额度',
				returnWay:'还款方式',
				ageLimit:'年龄限制',
				register:'户籍要求',
				taxLimit:'税率区间',
				examine:'审批时间',
				apply:'申请方式',
				security:'社保要求',
				taxLevel:'纳税等级',
				water:'流水要求'
			}
			
			// 复制原始数据，避免直接修改原始数据
			const productData = {...res.data[0]};
			
			// 处理枚举字段，将值转换为文本
			for(let field in options.enumMappings) {
				if(productData.hasOwnProperty(field) && options.enumMappings[field].hasOwnProperty(productData[field])) {
					// 保存原始值，添加后缀 Value
					productData[`${field}Value`] = productData[field];
					// 将枚举值替换为文本值
					productData[field] = options.enumMappings[field][productData[field]];
				}
			}
			
			// 生成tags数组，此时使用的已经是转换后的文本值
			for(let tag in productData){
				if(tag in labels){
					tags.push(`${labels[tag]}:${productData[tag]}`)
				}
			}
			
			// 更新res.data[0]为处理后的数据
			res.data[0] = productData;
		}
		// 返回data示例
		if(res.data){
			return {
				status:true,
				msg:'查询成功',
				tags,
				data:res.data[0] //请根据实际需要返回值
			}
		}else{
			return {
				status:true,
				msg:'查询成功',
				tags,
				data:null //请根据实际需要返回值
			}
		}
		
	},
	/**
	 * getHomePageData获取首页数据
	* @param {string} param1 参数1描述
	* @returns {object} 返回值描述
	*/
	async getHomePageData() {
		// 业务逻辑
		const prodRes = await dbJQL.collection('mydb-product-list').where({article_status:1}).get()
		const newsVideoRes = await dbJQL.collection('opendb-news-articles').where({article_status:1,category_id:'68ec70083d029c7eaa728cdd'}).get()
		const newsRes = await dbJQL.collection('opendb-news-articles').where({article_status:1,category_id:'68ec6dd5a7c432f44b63ba3c'}).get()
		return {
			status:true,
			msg:'查询成功',
			data:{
				prodRes:prodRes.data,
				newsVideoRes:newsVideoRes.data,
				newsRes:newsRes.data
			}
		}
	},
	 /**
	  * getNetList 获取网点列表
	  * @param {string} param1 参数1描述
	  * @returns {object} 返回值描述
	  */
	 async getNetList() {
		// 业务逻辑
		const res = {
			data :[
				...options.stations
			]
		}
		return {
			status:true,
			msg:'查询成功',
			data:res.data //请根据实际需要返回值
		}
	},
	/**
	 * getNetDetail 获取网点详情
	 * @param {string} param1 参数1描述
	 * @returns {object} 返回值描述
	 */
	async getNetDetail({netId}) {
		// 业务逻辑
		const res = {
			data :[
				...options.stations
			]
		}
		if(!netId){
			return {
				status:true,
				msg:'查询失败',
				data:null //请根据实际需要返回值
			}
		}
		const net = res.data.find(item=>item.id==netId)
		if(!net){
			return {
				status:true,
				msg:'查询失败',
				data:null //请根据实际需要返回值
			}
		}else{
			return {
				status:true,
				msg:'查询成功',
				data:net //请根据实际需要返回值
			}
		}
	},
	/**
	 * getMyOrganize 获取我的上下级
	 * @param {string} param1 参数1描述
	 * @returns {object} 返回值描述
	 */
	async getMyOrganize() {
		// 业务逻辑
		console.log('uid',uid)
		const data={
			superior: {
				id: 0,
				name: '李经理',
				level: 'VIP4',
				avatar: '/static/images/avatar-2.png'
			},
			subordinates: [
				{
				id: 2,
				name: '王小红',
				level: 'VIP2',
				avatar: '/static/images/avatar-3.png',
				joinTime: '2023-05-10',
				subCount: 5
				},
				{
				id: 3,
				name: '赵小刚',
				level: 'VIP1',
				avatar: '/static/images/avatar-4.png',
				joinTime: '2023-06-15',
				subCount: 3
				},
				{
				id: 4,
				name: '刘小华',
				level: 'VIP1',
				avatar: '/static/images/avatar-5.png',
				joinTime: '2023-07-22',
				subCount: 0
				}
			],
		}

		const permissions = await dbJQL.collection('mydb-permission').where({user_id:uid}).get()

		if(!permissions.data.length){
			return {
				status:true,
				msg:'上级不存在',
				data:null //请根据实际需要返回值
			}
		}
		console.log('parent_id',permissions.data)
		const superior = await dbJQL.collection('uni-id-users').where({_id:permissions.data[0].parent_id}).field('nickname,avatar,register_date').get()
		console.log('superior',superior.data)
		if(!superior.data){
			return {
				status:true,
				msg:'查询上级失败',
				data:null //请根据实际需要返回值
			}
		}
		data.superior = superior.data[0]

		const employeesRes = await dbJQL.collection('mydb-permission').where({parent_id:uid}).get()
		console.log('employeesRes',employeesRes.data)

		if(!employeesRes.data){
			return {
				status:true,
				msg:'查询下级失败',
				data:null //请根据实际需要返回值
			}
		}
		const ids = employeesRes.data.map(item=>item.user_id)
		console.log('ids',ids)
		const subordinates = await dbJQL.collection('uni-id-users').where({_id:{$in:ids}}).field('nickname,avatar,register_date').get()
		if(!subordinates.data){
			return {
				status:true,
				msg:'查询下级失败',
				data:null //请根据实际需要返回值
			}
		}
		data.subordinates = subordinates.data
		return {
			status:true,
			msg:'查询成功',
			data:data //请根据实际需要返回值
		}
	},
	/**
	  * getInvestInfo 获取加盟信息
	  * @param {string} param1 参数1描述
	  * @returns {object} 返回值描述
	  */
	 async getInvestInfo() {
		// 业务逻辑
		const res = {
				...options.investOptions
		}
		return {
			status:true,
			msg:'查询成功',
			data:res //请根据实际需要返回值
		}
	},
}
